# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:张广勤
@Web site: https://www.tunan.wang
@Github:www.github.com
 
@File:yi_class1_0.py
@Time:2024/8/14 13:25

@Motto:不积跬步无以至千里，不积小流无以成江海！
"""

class Yi:
    def __init__(self,filename,key=''):
        self.filename=filename
        self.key=key
        self.k64 =  [
    '乾', '坤', '屯', '蒙', '需', '讼', '师', '比', '小畜', '履', '泰', '否',
    '同人', '大有', '谦', '豫', '随', '蛊', '临', '观', '噬嗑', '贲', '剥',
    '复', '无妄', '大畜', '颐', '大过', '坎', '离', '咸', '恒', '遁', '大壮',
    '晋', '明夷', '家人', '睽', '蹇', '解', '损', '益', '夬', '姤', '萃',
    '升', '困', '井', '革', '鼎', '震', '艮', '渐', '归妹', '丰', '旅', '巽', '兑',
    '涣', '节', '中孚', '小过', '既济', '未济'
]

    # def read_yi_file(self):
    #     # 初始化一个空字典来存储所有卦的信息
    #     all_guas = {}
    #     current_gua_info = []
    #     index = 0  # 用于跟踪k64列表中的索引
    #
    #     with open(self.filename, 'r', encoding='utf-8') as file:
    #         for line in file:
    #             line = line.strip()
    #             if line.startswith(self.key) and index <= len(self.k64):
    #                 # 如果这一行是一个新卦的开始，并且我们还没有超出k64的范围
    #                 if current_gua_info:
    #                     # 如果不是第一个卦，则保存前一个卦的信息
    #                     all_guas[self.k64[index - 1]] = '\n'.join(current_gua_info)
    #
    #                     # 初始化当前卦的信息列表，并准备从下一行开始读取内容
    #                 # 注意：这里我们不需要从当前行中分割出卦名，因为我们直接使用k64中的键
    #                 current_gua_info = [line.split(':', 1)[1].strip()]  # 存储卦的简要说明及后续内容
    #
    #                 # 索引递增，准备下一个卦
    #                 index += 1
    #             elif line and index <= len(self.k64):
    #                 # 如果行不为空且我们还没有超出k64的范围，则添加到当前卦的信息中
    #                 current_gua_info.append(line)
    #
    #                 # 添加到最后一个卦的信息（如果文件正确结束且current_gua_info非空）
    #         if current_gua_info and index <= len(self.k64):
    #             all_guas[self.k64[index - 1]] = '\n'.join(current_gua_info)
    #
    #     return all_guas


    def read_file_and_create_dict(self):
        tuan_dict = {}
        current_key_index = 0
        value = []

        with open(self.filename, 'r', encoding='utf-8') as file:
            for line in file:
                clean_line = line.strip()
                if self.key in clean_line:
                    # 检查是否超出k64的索引范围
                    if current_key_index < len(self.k64):
                        if value:
                            tuan_dict[self.k64[current_key_index - 1]] = value
                        value = []  # 重置value列表
                        current_key_index += 1
                    else:
                        # 如果索引超出范围，但仍有"彖传原文"，可能是文件结构问题，可以记录或忽略
                        print(f"Warning: {self.key} found beyond k64 index range. Skipping.")
                else:
                    if clean_line:
                        value.append(clean_line)

                    # 循环结束后，添加最后一个value列表到字典中（如果存在）
            if value and current_key_index <= len(self.k64):
                tuan_dict[self.k64[current_key_index - 1]] = value

        return tuan_dict

    def read_gua_file(self):
        all_guas = {}
        current_gua_key = None
        current_gua_value = []

        with open(self.filename, 'r', encoding='utf-8') as file:
            for line in file:
                line = line.strip()
                if line.startswith(('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')):
                    # 检测是否是一个新的卦的开头（基于序号的格式）
                    if current_gua_key is not None and current_gua_value:
                        # 如果当前有卦的信息，则保存并重置
                        all_guas[current_gua_key] = current_gua_value
                        current_gua_value = []

                        # 提取序号后面的描述性文本作为键
                    # 假设序号和描述性文本之间有空格分隔
                    parts = line.split(None, 1)  # 使用None作为split的参数来按空白字符分割，但只分割一次
                    if len(parts) > 1:
                        current_gua_key = parts[1]
                    else:
                        # 如果没有找到描述性文本，则使用序号作为键（可能不是最佳实践）
                        current_gua_key = line

                elif line:
                    # 如果行不为空，则添加到当前卦的值中
                    current_gua_value.append(line)

                    # 添加最后一个卦的信息（如果存在）
            if current_gua_key is not None and current_gua_value:
                all_guas[current_gua_key] = current_gua_value

        return all_guas

#一个类，三个实例对象，用类中的三个方法函数

#字典的值为字符串-->列表，"第"开头
yi=Yi(filename="./yi/yi_quanwen.txt", key='第')
# yi=Yi(filename="yi_quanwen.txt", key='第')
yi_dict=yi.read_file_and_create_dict()   #没有用read_yi_file()方法，字典的值为列表
# print(yi_dict)


#类的实例-->对象，字典的值为列表,"彖传原文"开头
yi_tuan=Yi(filename='./yi/tuan_quanwen.txt', key='彖传原文')
# yi_tuan=Yi(filename='tuan_quanwen.txt', key='彖传原文')
tuan_dict=yi_tuan.read_file_and_create_dict()
# print(tuan_dict)

#key含默认值''，字典的值为列表
yi_xiang=Yi(filename='./yi/xiang_quanwen.txt')
# yi_xiang=Yi(filename='xiang_quanwen.txt')
xiang_dict=yi_xiang.read_gua_file()
# print(xiang_dict)
